import md5 from './utils/md5.js'
import {getDdiot} from './request.js'
// 一、签名参数sign生成的方法

// 第1步: 将所有参数（注意是所有参数），除去sign本身，以及值是空的参数，按参数名字母升序排序。

// 第2步: 然后把排序后的参数按参数1值1参数2值2…参数n值n（这里的参数和值必须是传输参数的原始值，不能是经过处理的，如不能将&quot;转成”后再拼接）的方式
// 拼接成k1=v1&k2=v2&time=vtime的一个字符串。

// 第3步: 把分配给接入方的验证密钥key拼接在第2步得到的字符串后面k1=v1&k2=v2&time=vtime&key=secret。

// 第2步: 在上一步得到的字符串前面加上验证密钥key(这里的密钥key是接口提供方分配给接口接入方的)，然后计算md5值，得到32位字符串，然后转成大写.

// 第4步: 计算第3步字符串的md5值(32位)，然后转成大写,得到的字符串作为sign的值。

let sign = function(json) {
	console.log('sign',getDdiot())
		if(typeof getDdiot().sign === 'function'){
			return getDdiot().sign(json)
		}
		var arr = [];
		var vtime = Date.parse( new Date() ).toString(); //精确到毫秒
		vtime = vtime.substr(0,10); //精确到秒
		json['timestamp'] = vtime
		// json.push({
		// 	timestamp:vtime
		// })
		// console.log(json,'sssss');
		Object.keys(json).forEach(item=>{
			if(item != 'sign'){
				arr.push(item);
			}
		})
		//将元素按照 ASCII 字符顺序进行升序排列（也就是所谓的自然顺序）
		arr = arr.sort();

		var str = '';
		for (let i = 0; i < arr.length; i++) {
		    if (json[arr[i]] === '') continue;
		    if (str !== '') str += '&';
		    str += arr[i] + '=' + encodeURI(json[arr[i]])
		} 
	
		const app_secret = getDdiot.app_secret || ''
		const app_id = getDdiot.app_id || ''

		str += '&key='+md5(app_secret+app_id)
		// console.log(str,'strstr');
		var signature = md5(decodeURI(str))
		// console.log('组装完成',str,app_secret,app_id);
		return Object.assign({},json,{
			timestamp:vtime,
			appid:app_id,
			sign:signature.toUpperCase()
		});
    }


export default sign
